package main

import "fmt"

type ParseError struct {
	Filename string // 文件名
	Line     int    //行号
}

// 实现error接口，返回错误描述
func (e *ParseError) Error() string {
	return fmt.Sprintf("%s:%d", e.Filename, e.Line)
}

//创建一些解析错误
func newParseError(filename string, line int) error {
	return &ParseError{filename, line}
}

func main() {
	var e error
	//创建一个错误实例，包含文件名和行号
	e = newParseError("demo.go", 1)
	//通过error 接口查看错误描述
	fmt.Println(e.Error())

	switch detail := e.(type) {
	// 根据错误接口具体的类型，获取详细错误信息
	case *ParseError:
		fmt.Printf("Filename : %s line %d \n", detail.Filename, detail.Line)
	default:
		fmt.Println("other error")
	}
}
